From: Florian Müllner Date: Fri, 7 Mar 2014 15:04:01 +0000 (+0100) Subject: loginDialog: Defer loading user list until needed X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~2665 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=0ba05b29b9a2420d3e6c0c3cfb2a623aaac9ab2a;p=gnome-shell.git loginDialog: Defer loading user list until needed Loading the user list can be expensive, for instance when there is a large number of users and/or their avatars have to be fetched over the network. In case the user list is disabled anyway, there is no point in doing that work just to hide it, so stop doing that. https://bugzilla.gnome.org/show_bug.cgi?id=725905 --- diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js index 080237cfb..6e3cb97e3 100644 --- a/js/gdm/loginDialog.js +++ b/js/gdm/loginDialog.js @@ -469,6 +469,17 @@ const LoginDialog = new Lang.Class({ this._sessionMenuButton.actor.show(); this._authPrompt.addActorToDefaultButtonWell(this._sessionMenuButton.actor); + this._disableUserList = undefined; + this._userListLoaded = false; + + // If the user list is enabled, it should take key focus; make sure the + // screen shield is initialized first to prevent it from stealing the + // focus later + Main.layoutManager.connect('startup-complete', + Lang.bind(this, this._updateDisableUserList)); + }, + + _ensureUserListLoaded: function() { if (!this._userManager.is_loaded) this._userManagerLoadedId = this._userManager.connect('notify::is-loaded', Lang.bind(this, function() { @@ -480,8 +491,7 @@ const LoginDialog = new Lang.Class({ })); else GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, this._loadUserList)); - - }, + }, _updateDisableUserList: function() { let disableUserList = this._settings.get_boolean(GdmUtil.DISABLE_USER_LIST_KEY); @@ -801,6 +811,7 @@ const LoginDialog = new Lang.Class({ }, _showUserList: function() { + this._ensureUserListLoaded(); this._authPrompt.hide(); this._sessionMenuButton.close(); this._setUserListExpanded(true); @@ -844,14 +855,17 @@ const LoginDialog = new Lang.Class({ }, _loadUserList: function() { + if (this._userListLoaded) + return GLib.SOURCE_REMOVE; + + this._userListLoaded = true; + let users = this._userManager.list_users(); for (let i = 0; i < users.length; i++) { this._userList.addUser(users[i]); } - this._updateDisableUserList(); - this._userManager.connect('user-added', Lang.bind(this, function(userManager, user) { this._userList.addUser(user);